package br.urca.impl;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.transaction.Transactional;

import br.urca.dao.AtividadeAlunoDAO;
import br.urca.model.AtividadeAluno;

@Transactional
public class JPAAtividadeAlunoDAO implements AtividadeAlunoDAO {
	
	private EntityManager manager;
	
	public JPAAtividadeAlunoDAO() {
		this(null);
	}
	
	@Inject
	public JPAAtividadeAlunoDAO(EntityManager manager) {
		this.manager = manager;
	}

	@Override
	public List<AtividadeAluno> todos() {
		try {
			return this.manager.createQuery("SELECT a FROM AtividadeAluno a",
					AtividadeAluno.class).getResultList();
		} catch(Exception e) {
			return null;
		}
	}

	@Override
	public AtividadeAluno getAtividadeAluno(String matricula, String codAtividade) {
		try {
			return this.manager
					.createQuery(
							"SELECT a FROM AtividadeAluno a "
									+ "WHERE a.id.matricula = :matricula "
									+ "AND a.id.codigoAtividade = :codigo ",
									AtividadeAluno.class)
					.setParameter("matricula", matricula)
					.setParameter("codigo", codAtividade).getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}

	@Override
	public List<AtividadeAluno> getListComCredito(String matricula) {
		try {
			return this.manager
					.createQuery(
							"SELECT a FROM AtividadeAluno a "
									+ "WHERE a.id.matricula = :matricula "
									+ "AND a.pontuacao > 0 "
									+ "AND a.pontuacao is not null "
									+ "AND a.cargaHoraria is not null ",
									AtividadeAluno.class)
					.setParameter("matricula", matricula).getResultList();
		} catch (Exception e) {
			return null;
		}
	}

}
